package smallfrench.moteur.biblio;

import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;

/**
 * Un vecteur à 2 dimensions
 * @author antoine1023
 */
public class AVecteur2 extends AObjet {

	public static final AClasse CLASSE = AClasse.creer(
			AVecteur2.class, "Vecteur2");

	public static final AVecteur2 NUL = new AVecteur2(0.0, 0.0);

	public final double x, y;

	@AnnotationMembre
	public AVecteur2(RFlottant fx, RFlottant fy) {
		x = fx.valeur;
		y = fy.valeur;
	}

	public AVecteur2(double x, double y) {
		this.x = x;
		this.y = y;
	}

	public AVecteur2(Point2D p) {
		x = p.getX();
		y = p.getY();
	}

	@AnnotationMembre
	public RFlottant obtenirX() {
		return new RFlottant(x);
	}

	@AnnotationMembre
	public RFlottant obtenirY() {
		return new RFlottant(y);
	}

	public AVecteur2 transformer(AffineTransform at) {
		return new AVecteur2(at.transform(new Point2D.Double(x, y), null));
	}

	public AVecteur2 ajouter(double x, double y) {
		return new AVecteur2(this.x + x, this.y + y);
	}

	@AnnotationMembre
	public AVecteur2 ajouter(AVecteur2 d) {
		return new AVecteur2(x + d.x, y + d.y);
	}

	@AnnotationMembre
	public AVecteur2 soustraire(AVecteur2 d) {
		return new AVecteur2(x - d.x, y - d.y);
	}

	@Override
	@AnnotationMembre
	public RChaine enChaine() {
		return new RChaine("(" + x + " ; " + y + ")");
	}

}
